<?php
namespace backend\controllers;

use Yii;
use yii\data\Pagination;
use common\models\GameState;
use common\models\Game;
use common\models\GameVersion;

/**
 * 游戏版本管理
 *
 * @author Administrator
 */
class GameVersionController extends BaseController
{

    /**
     * 游戏版本列表
     */
    public function actionIndex()
    {
        $input = Yii::$app->request->get();
        // 根据参数获取信息
        if (! empty($input['key'])) {
            // TODO:无法使用预加载，暂用土办法
            $game_ids = Game::find()->select("game_id")
                ->where("game_name like '%" . $input['key'] . "%'")
                ->column();
            $query = GameVersion::find()->with('game')->where([
                'in',
                'game_id',
                $game_ids
            ]);
            // $query = GameVersion::find()->with([
            // 'game' => function ($query) use($input)
            // {
            // $query->where("game_name like '%" . $input['key'] . "%'");
            // }
            // ]);
        } else {
            $query = GameVersion::find()->with('game');
        }
        // 根据游戏ID参数过滤
        if (! empty($input['game_id'])) {
            $query->andWhere("game_id=:game_id")->addParams([
                'game_id' => $input['game_id']
            ]);
        }
        // 根据排序抓取分页列表数据
        if (! empty($input['id'])) {
            $query->orderBy("id {$input['id']}");
        } else {
            $query->orderBy("id desc");
        }

        $countQuery = clone $query;

        // 分页处理
        $pages = new Pagination([
            'totalCount' => $countQuery->count()
        ]);
        $models = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
        return $this->render('index', compact('models', 'pages'));
    }

    /**
     * 添加或编辑游戏版本
     */
    public function actionEdit()
    {
        // 所有游戏状态，搜索游戏时模态框所用
        $states = GameState::find()->all();

        $model = null;
        $id = Yii::$app->request->get('id', 0);
        if ((int) $id > 0) {
            $model = GameVersion::find()->with("game")
                ->where("id={$id}")
                ->one();
        }
        return $this->render('edit', compact('model', 'states'));
    }

    /**
     * 保存新增或修改的游戏版本
     */
    public function actionSave()
    {
        $post = Yii::$app->request->post();
        // 验证
        if (Yii::$app->request->isPost && ! empty($post)) {
            // 设置表单回带
            Yii::$app->session->setFlash('post', $post);

            // 验证表单的游戏ID
            $game = Game::findOne($post['game_id']);
            if (! is_object($game)) {
                Yii::$app->session->setFlash('message_error', '操作异常，所指派的游戏不存在');
                return $this->redirect(Yii::$app->request->referrer);
            }

            // 保存数据
            $game_version = isset($post['id']) ? GameVersion::findOne((int) $post['id']) : new GameVersion();
            $game_version->attributes = $post;
            $game_version->save();

            // 验证数据
            if (! empty($game_version->getErrors())) {
                Yii::$app->session->setFlash('message_error', $game_version->getErrors());
                return $this->redirect(Yii::$app->request->referrer);
            }
            Yii::$app->session->setFlash('message_success', isset($post['id']) ? '编辑成功！' : '添加成功！');
            $session = Yii::$app->session;
            unset($session['post']);
            return $this->redirect('/game-version/index', 200);
        }
        throw new \yii\web\MethodNotAllowedHttpException('操作异常，不支持非post提交保存数据');
        return false;
    }

    /**
     * 游戏版本删除
     */
    public function actionDelete()
    {
        if (! Yii::$app->request->isPost) {
            throw new \yii\web\MethodNotAllowedHttpException('操作异常，不支持非post提交删除数据');
            return false;
        }
        // 验证游戏版本是否存在
        $query = GameVersion::findOne((int) Yii::$app->request->post('version_id'));
        if (is_object($query)) {
            // 执行删除，并返回成功信息
            $query->delete();
            Yii::$app->session->setFlash('message_success', '删除成功！');
            return $this->redirect('/game-version/index', 200);
        }
        // 不存在返回上一页，并返回错误信息
        Yii::$app->session->setFlash('message_error', '此游戏版本不存在！');
        return $this->redirect(Yii::$app->request->referrer);
    }
}
